package ar.uba.fi.tecnicas.vista;

import java.awt.Point;

import javax.swing.JComboBox;
import javax.swing.JLabel;

import ar.uba.fi.tecnicas.fabrica.TipoMaquina;
import ar.uba.fi.tecnicas.juego.Juego;
import ar.uba.fi.tecnicas.vista.PanelFabrica.IFabricaObserver;

public class PanelComprarMaquina extends PanelOperacion implements IFabricaObserver
{
	protected static final long serialVersionUID = 0;
	
	private JComboBox cbTipoMaquina;
	private JComboBox cbLineaProduccion;
	private JLabel lblPosicion;
	
	private Point posicion;
	
	public PanelComprarMaquina(PanelControles panelControles)
	{
		super(panelControles);
	}

	@Override
	protected void asignarEventos() 
	{
		panelControles.getFrameJuego().agregarListenerPanelFabrica(this);
	}

	@Override
	protected void inicializarComponentes() 
	{
		cbTipoMaquina = new JComboBox();
		cbLineaProduccion = new JComboBox();
		lblPosicion = new JLabel("Posicion seleccionada");
		
		for(TipoMaquina tipo : Juego.instancia.getTiposMaquina())
		{
			String descTipoMaquina = tipo.getNombre();
			descTipoMaquina += " - " + tipo.getPrecio();

			cbTipoMaquina.addItem(descTipoMaquina);
		}
		
		for(String linea : Juego.instancia.getJugador().getLineasProduccion())
		{
			cbLineaProduccion.addItem(linea);
		}
		
		this.componentes.add(cbTipoMaquina);
		this.componentes.add(cbLineaProduccion);
		this.componentes.add(lblPosicion);
	}

	@Override
	protected void realizarOperacion() 
	{
		int indexTipoMaquina = cbTipoMaquina.getSelectedIndex();
		TipoMaquina tipo = Juego.instancia.getTiposMaquina().toArray(new TipoMaquina[0])[indexTipoMaquina];
		
		int indexLineaProduccion = cbLineaProduccion.getSelectedIndex();

		this.panelControles.getFrameJuego().comprarMaquina(tipo, this.posicion, indexLineaProduccion);
	}

	@Override
	protected void terminarOperacion() 
	{
		panelControles.getFrameJuego().quitarListenerPanelFabrica(this);
	}
	
	public void posicionSeleccionada(Point posicion)
	{
		this.posicion = posicion;
		this.lblPosicion.setText("(" + posicion.x + ", " + posicion.y + ")");
	}
}
